#include "Task.hpp"
#include "RingQueue.hpp"

void* productor(void* args)
{
    RingQueue<int> * q = static_cast<RingQueue<int>*>(args);
    //int i = 0, j = 0;
    int data = 0;
    while(true)
    {
        q->Equeue(data);//传入一个数据
        data++;
    }
    return nullptr;
}

void* consumer(void* args)
{
    RingQueue<int > * q = static_cast<RingQueue<int>*>(args);
    while(true)
    {
        sleep(1);
        int t = 0;
        q->Pop(&t);//这里通过传入指针来修改原来的变量
        std::cout << "消费者消费了一个数据：" << t << std::endl;//取数据
    }
    return nullptr;
}

int main()
{
    RingQueue<int >* bq = new RingQueue<int>();//pthread_create 规定第四个参数为指针，所以new一个自定义类出来，通过传参强制类型转换进行自定义类的访问
    pthread_t td1,td2;

    //创建线程1
    pthread_create(&td1,nullptr,productor,bq);

    //创建线程2
    pthread_create(&td1,nullptr,consumer,bq);
    
    //线程等待
    pthread_join(td1,nullptr);
    pthread_join(td2,nullptr);
    return 0;
}